/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.tesoreria.beans;

import org.cip.esymons.general.util.ControladorAbstracto;
import java.util.ArrayList;
import java.util.List;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;
import org.cip.esymons.eventos.be.Ambiente;
import org.cip.esymons.eventos.be.Evento;
import org.cip.esymons.eventos.be.ServicioEquipo;
import org.cip.esymons.general.be.Capitulo;
import org.cip.esymons.tesoreria.bc.CuentaEgresoDelegate;
import org.cip.esymons.tesoreria.be.CuentaContable;
import org.cip.esymons.tesoreria.be.CuentaEgreso;
import org.cip.esymons.tesoreria.be.EnumEstadoCuentaEgreso;
import org.cip.esymons.tesoreria.be.EnumTipoCuentaEgreso;
import org.cip.esymons.tesoreria.be.ProcesoElectoral;
import org.cip.esymons.tesoreria.be.TipoMoneda;

/**
 *
 * @author Administrador
 */
public class CuentaEgresoController extends ControladorAbstracto {

    private CuentaEgresoDelegate delegado;
    private CuentaEgreso cuentaEgreso;
    private EnumEstadoCuentaEgreso estadoCuentaEgresoSeleccionada;
    private CuentaContable cuentaContableSeleccionada;
    private String nombreCuentaContable;
    private TipoMoneda tipoMonedaSeleccionada;
    private Capitulo capituloCipSeleccionado;
    private String filtroNombreCuentaEgreso;
    private EnumTipoCuentaEgreso tipoSeleccionado;
    private Evento eventoSeleccionado;
    private Ambiente ambienteSeleccionado;
    private ServicioEquipo servicioSeleccionado;
    private ProcesoElectoral procesoElectoralSeleccionado;

    public CuentaEgresoController() {
        delegado = new CuentaEgresoDelegate();
        
    }

    public List<CuentaEgreso> autocompletarCuentasEgreso(Object event) {
        List<CuentaEgreso> lista = new ArrayList();
        String cond = event.toString().toUpperCase();
        try {
            lista = delegado.listarPorCond(cond);
        } catch (Exception ex) {
            error(ex.toString());
        }
        return lista;
    }

    public void fijarTipoElegidoCE(ValueChangeEvent event) {
        tipoSeleccionado = (EnumTipoCuentaEgreso) event.getNewValue();
    }


    public SelectItem[] getEstadoCuentaEgresoItems() {
        try {
            SelectItem[] select = new SelectItem[EnumEstadoCuentaEgreso.values().length];
            int cont = 0;
            for (EnumEstadoCuentaEgreso e : EnumEstadoCuentaEgreso.values()) {
                select[cont] = new SelectItem(e, e.name());
                cont++;
            }
            return select;
        } catch (Exception ex) {
            SelectItem[] select = new SelectItem[1];
            select[0] = new SelectItem(null, "No existen Estados");
            return select;
        }
    }

     public SelectItem[] getTiposCuentaEgresoItems() {
        try {
            SelectItem[] select = new SelectItem[EnumTipoCuentaEgreso.values().length];
            int cont = 0;
            for (EnumTipoCuentaEgreso e : EnumTipoCuentaEgreso.values()) {
                select[cont] = new SelectItem(e, e.name());
                cont++;
            }
            return select;
        } catch (Exception ex) {
            SelectItem[] select = new SelectItem[1];
            select[0] = new SelectItem(null, "No existen Tipos de Cuentas de Egreso");
            return select;
        }
    }

    public List<CuentaEgreso> getListaCuentasEgreso() {
        try {
            return delegado.findAll();
        } catch (Exception ex) {
            return new ArrayList();
        }
    }

    public boolean filtrarPorNombreCuentaEgreso(Object obj) {
        try {
            CuentaEgreso ce = (CuentaEgreso) obj;
            if (ce.getCegDesc().toLowerCase().indexOf(filtroNombreCuentaEgreso.toLowerCase()) >= 0) {
                return true;
            } else {
                return false;
            }
        } catch (Exception ex) {
            return true;
        }
    }

    public String nuevo() {
        cuentaEgreso = new CuentaEgreso();
        tipoSeleccionado = EnumTipoCuentaEgreso.Otros;
        cuentaEgreso.setCegEstado(EnumEstadoCuentaEgreso.ACTIVO);
        cuentaContableSeleccionada=null;
        nombreCuentaContable=null;
        tipoMonedaSeleccionada=null;
        capituloCipSeleccionado=null;
        eventoSeleccionado=null;
        ambienteSeleccionado=null;
        servicioSeleccionado=null;
        procesoElectoralSeleccionado=null;
        return "nuevo";
    }

    public String grabar() {
        cuentaEgreso.setMonedaRelacionada(tipoMonedaSeleccionada);
        cuentaEgreso.setCuentaContableRelacionada(cuentaContableSeleccionada);
        cuentaEgreso.setCapituloCip(capituloCipSeleccionado);
        cuentaEgreso.setCegTipo(tipoSeleccionado);
        if (tipoSeleccionado.equals(EnumTipoCuentaEgreso.Evento)){
                cuentaEgreso.setEventoRelacionado(eventoSeleccionado);
        }
        if (tipoSeleccionado.equals(EnumTipoCuentaEgreso.Ambiente)){
                cuentaEgreso.setAmbienteRelacionado(ambienteSeleccionado);
        }
        if (tipoSeleccionado.equals(EnumTipoCuentaEgreso.Servicio)){
                cuentaEgreso.setServicioEquipoRelacionado(servicioSeleccionado);
        }
        if (tipoSeleccionado.equals(EnumTipoCuentaEgreso.Elecciones)){
                cuentaEgreso.setProcesoElectoralRelacionado(procesoElectoralSeleccionado);
        }        
        delegado.create(cuentaEgreso);
        ControladorAbstracto.info("Se insertó satisfactoriamente la Cuenta de Egreso.");
        return "buscar";
    }

    public String actualizar() {
        if (tipoSeleccionado.equals(EnumTipoCuentaEgreso.Evento)){
                cuentaEgreso.setEventoRelacionado(eventoSeleccionado);
        }
        if (tipoSeleccionado.equals(EnumTipoCuentaEgreso.Ambiente)){
                cuentaEgreso.setAmbienteRelacionado(ambienteSeleccionado);
        }
        if (tipoSeleccionado.equals(EnumTipoCuentaEgreso.Servicio)){
                cuentaEgreso.setServicioEquipoRelacionado(servicioSeleccionado);
        }
        if (tipoSeleccionado.equals(EnumTipoCuentaEgreso.Elecciones)){
                cuentaEgreso.setProcesoElectoralRelacionado(procesoElectoralSeleccionado);
        }
        cuentaEgreso.setCegTipo(tipoSeleccionado);
        cuentaEgreso.setCuentaContableRelacionada(cuentaContableSeleccionada);
        delegado.edit(cuentaEgreso);
        ControladorAbstracto.info("Se actualizó satisfactoriamente la Cuenta de Egreso.");
        return "buscar";
    }

    public String editar() {
        nombreCuentaContable = cuentaEgreso.getCuentaContableRelacionada().getNombreLargo();
        cuentaContableSeleccionada = cuentaEgreso.getCuentaContableRelacionada();
        tipoSeleccionado=cuentaEgreso.getCegTipo();
        if (tipoSeleccionado.equals(EnumTipoCuentaEgreso.Evento)){
                eventoSeleccionado=cuentaEgreso.getEventoRelacionado();
        }
        if (tipoSeleccionado.equals(EnumTipoCuentaEgreso.Ambiente)){
                ambienteSeleccionado=cuentaEgreso.getAmbienteRelacionado();
        }
        if (tipoSeleccionado.equals(EnumTipoCuentaEgreso.Servicio)){
                servicioSeleccionado=cuentaEgreso.getServicioEquipoRelacionado();
        }
        if (tipoSeleccionado.equals(EnumTipoCuentaEgreso.Elecciones)){
                procesoElectoralSeleccionado=cuentaEgreso.getProcesoElectoralRelacionado();
        }
        return "editar";
    }

    public String anularCuentaEgreso() {
        cuentaEgreso.setCegEstado(EnumEstadoCuentaEgreso.ANULADO);
        delegado.edit(cuentaEgreso);
        return null;
    }

    /**
     * @return the cuentaEgreso
     */
    public CuentaEgreso getCuentaEgreso() {
        return cuentaEgreso;
    }

    /**
     * @param cuentaEgreso the cuentaEgreso to set
     */
    public void setCuentaEgreso(CuentaEgreso cuentaEgreso) {
        this.cuentaEgreso = cuentaEgreso;
    }

    public CuentaContable getCuentaContableSeleccionada() {
        return cuentaContableSeleccionada;
    }

    /**
     * @param cuentaContableSeleccionada the cuentaContableSeleccionada to set
     */
    public void setCuentaContableSeleccionada(CuentaContable cuentaContableSeleccionada) {
        this.cuentaContableSeleccionada = cuentaContableSeleccionada;
    }

    /**
     * @return the nombreCuentaContable
     */
    public String getNombreCuentaContable() {
        return nombreCuentaContable;
    }

    /**
     * @param nombreCuentaContable the nombreCuentaContable to set
     */
    public void setNombreCuentaContable(String nombreCuentaContable) {
        this.nombreCuentaContable = nombreCuentaContable;
    }

    /**
     * @return the tipoMonedaSeleccionada
     */
    public TipoMoneda getTipoMonedaSeleccionada() {
        return tipoMonedaSeleccionada;
    }

    /**
     * @param tipoMonedaSeleccionada the tipoMonedaSeleccionada to set
     */
    public void setTipoMonedaSeleccionada(TipoMoneda tipoMonedaSeleccionada) {
        this.tipoMonedaSeleccionada = tipoMonedaSeleccionada;
    }

    /**
     * @return the capituloCipSeleccionado
     */
    public Capitulo getCapituloCipSeleccionado() {
        return capituloCipSeleccionado;
    }

    /**
     * @param capituloCipSeleccionado the capituloCipSeleccionado to set
     */
    public void setCapituloCipSeleccionado(Capitulo capituloCipSeleccionado) {
        this.capituloCipSeleccionado = capituloCipSeleccionado;
    }

    /**
     * @return the filtroNombreCuentaEgreso
     */
    public String getFiltroNombreCuentaEgreso() {
        return filtroNombreCuentaEgreso;
    }

    /**
     * @param filtroNombreCuentaEgreso the filtroNombreCuentaEgreso to set
     */
    public void setFiltroNombreCuentaEgreso(String filtroNombreCuentaEgreso) {
        this.filtroNombreCuentaEgreso = filtroNombreCuentaEgreso;
    }

    /**
     * @return the estadoCuentaEgresoSeleccionada
     */
    public EnumEstadoCuentaEgreso getEstadoCuentaEgresoSeleccionada() {
        return estadoCuentaEgresoSeleccionada;
    }

    /**
     * @param estadoCuentaEgresoSeleccionada the estadoCuentaEgresoSeleccionada to set
     */
    public void setEstadoCuentaEgresoSeleccionada(EnumEstadoCuentaEgreso estadoCuentaEgresoSeleccionada) {
        this.estadoCuentaEgresoSeleccionada = estadoCuentaEgresoSeleccionada;
    }

    /**
     * @return the tipoSeleccionado
     */
    public EnumTipoCuentaEgreso getTipoSeleccionado() {
        return tipoSeleccionado;
    }

    /**
     * @param tipoSeleccionado the tipoSeleccionado to set
     */
    public void setTipoSeleccionado(EnumTipoCuentaEgreso tipoSeleccionado) {
        this.tipoSeleccionado = tipoSeleccionado;
    }

    /**
     * @return the eventoSeleccionado
     */
    public Evento getEventoSeleccionado() {
        return eventoSeleccionado;
    }

    /**
     * @param eventoSeleccionado the eventoSeleccionado to set
     */
    public void setEventoSeleccionado(Evento eventoSeleccionado) {
        this.eventoSeleccionado = eventoSeleccionado;
    }

    /**
     * @return the ambienteSeleccionado
     */
    public Ambiente getAmbienteSeleccionado() {
        return ambienteSeleccionado;
    }

    /**
     * @param ambienteSeleccionado the ambienteSeleccionado to set
     */
    public void setAmbienteSeleccionado(Ambiente ambienteSeleccionado) {
        this.ambienteSeleccionado = ambienteSeleccionado;
    }

    /**
     * @return the servicioSeleccionado
     */
    public ServicioEquipo getServicioSeleccionado() {
        return servicioSeleccionado;
    }

    /**
     * @param servicioSeleccionado the servicioSeleccionado to set
     */
    public void setServicioSeleccionado(ServicioEquipo servicioSeleccionado) {
        this.servicioSeleccionado = servicioSeleccionado;
    }

    /**
     * @return the procesoElectoralSeleccionado
     */
    public ProcesoElectoral getProcesoElectoralSeleccionado() {
        return procesoElectoralSeleccionado;
    }

    /**
     * @param procesoElectoralSeleccionado the procesoElectoralSeleccionado to set
     */
    public void setProcesoElectoralSeleccionado(ProcesoElectoral procesoElectoralSeleccionado) {
        this.procesoElectoralSeleccionado = procesoElectoralSeleccionado;
    }
}
